package com.redepronik.negosysfab.invfac.controller;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.event.ActionEvent;

import org.primefaces.event.CellEditEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.invfac.entity.Bodega;
import com.redepronik.negosys.invfac.entity.Bodegalocal;
import com.redepronik.negosys.invfac.entity.Local;
import com.redepronik.negosys.invfac.entity.Localempleadocargo;
import com.redepronik.negosys.invfac.entityAux.PersonaCedulaNombre;
import com.redepronik.negosys.invfac.service.BodegaService;
import com.redepronik.negosys.invfac.service.LocalService;
import com.redepronik.negosys.rrhh.entity.Ciudad;
import com.redepronik.negosys.rrhh.entity.Empleadocargo;
import com.redepronik.negosys.rrhh.service.CiudadService;
import com.redepronik.negosys.rrhh.service.EmpleadoService;

@Controller
@Scope("session")
public class LocalBean {

	@Autowired
	private LocalService localService;

	@Autowired
	private BodegaService bodegaService;

	@Autowired
	private CiudadService ciudadService;

	@Autowired
	private EmpleadoService empleadoService;

	private List<Local> listaLocales;
	private List<Ciudad> listaCiudades;
	private List<Localempleadocargo> listaLocalEmpleadoCargo;
	private List<PersonaCedulaNombre> listaCajeros;
	private Local local;
	private Bodega bodega;
	private Bodegalocal bodegaLocal;
	private Empleadocargo cajero;
	private Localempleadocargo encargado;

	public LocalBean() {

	}

	public void actualizar(ActionEvent actionEvent) {
		localService.actualizar(local);
	}

	public void cancelar() {
		bodega = new Bodega();
		bodegaLocal = new Bodegalocal();
	}

	public void eliminar(ActionEvent actionEvent) {
		localService.eliminar(local);
	}

	public void eliminarCajero(ActionEvent actionEvent) {
		localService.eliminarCajero(encargado);
	}

	public Bodega getBodega() {
		return bodega;
	}

	public Bodegalocal getBodegaLocal() {
		return bodegaLocal;
	}

	public Empleadocargo getCajero() {
		return cajero;
	}

	public Localempleadocargo getEncargado() {
		return encargado;
	}

	public List<PersonaCedulaNombre> getListaCajeros() {
		return listaCajeros;
	}

	public List<Ciudad> getListaCiudades() {
		return listaCiudades;
	}

	public List<Localempleadocargo> getListaLocalEmpleadoCargo() {
		return listaLocalEmpleadoCargo;
	}

	public List<Local> getListaLocales() {
		return listaLocales;
	}

	public Local getLocal() {
		return local;
	}

	public void guardarCajeros() {
		localService.guardarCajeros(local, listaLocalEmpleadoCargo);
	}

	@PostConstruct
	public void init() {
		limpiarObjetos();
		listaLocales = new ArrayList<Local>();
		listaLocales = localService.obtenerTodos();
		listaCiudades = ciudadService.obtener(true);
		listaCajeros = empleadoService.obtenerPorCargo(4);
	}

	public void insertar(ActionEvent actionEvent) {
		if (local.getBodegalocals() == null)
			local.setBodegalocals(new ArrayList<Bodegalocal>());

		bodegaLocal.setBodega(bodegaService.obtenerPorBodegaId(bodega
				.getBodegaid()));
		local.addBodegalocal(bodegaLocal);

		listaLocales = localService.insertar(local);
	}

	public void insertarCajero() {
		localService.insertarCajero(local, cajero, listaLocalEmpleadoCargo);
	}

	public void limpiarCajeros() {
		cajero = new Empleadocargo();
		listaLocalEmpleadoCargo = new ArrayList<Localempleadocargo>();

		if (local.getLocalempleadocargos() != null
				&& !local.getLocalempleadocargos().isEmpty())
			listaLocalEmpleadoCargo = local.getLocalempleadocargos();
	}

	public void limpiarObjetos() {
		local = new Local();
		bodega = new Bodega();
		bodegaLocal = new Bodegalocal();
		cajero = new Empleadocargo();
		listaLocalEmpleadoCargo = new ArrayList<Localempleadocargo>();
	}

	public void modificarBodega(CellEditEvent event) {
		localService.modificarBodega(local, (int) event.getOldValue(),
				(int) event.getNewValue());
	}

	public void setBodega(Bodega bodega) {
		this.bodega = bodega;
	}

	public void setBodegaLocal(Bodegalocal bodegaLocal) {
		this.bodegaLocal = bodegaLocal;
	}

	public void setCajero(Empleadocargo cajero) {
		this.cajero = cajero;
	}

	public void setEncargado(Localempleadocargo encargado) {
		this.encargado = encargado;
	}

	public void setListaCajeros(List<PersonaCedulaNombre> listaCajeros) {
		this.listaCajeros = listaCajeros;
	}

	public void setListaCiudades(List<Ciudad> listaCiudades) {
		this.listaCiudades = listaCiudades;
	}

	public void setListaLocalEmpleadoCargo(
			List<Localempleadocargo> listaLocalEmpleadoCargo) {
		this.listaLocalEmpleadoCargo = listaLocalEmpleadoCargo;
	}

	public void setListaLocales(List<Local> listaLocales) {
		this.listaLocales = listaLocales;
	}

	public void setLocal(Local Local) {
		this.local = Local;
	}

}
